#region License Information
// Copyright (c) 2005 - 2009, Allan Spartacus Mangune (allan@owlpal.com)
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, 
// are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice, this list 
//   of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright notice, this list of 
//   conditions and the following disclaimer in the documentation and/or other materials provided 
//   with the distribution.
//
// * Neither the name of Owlpal nor the names of its contributors may be used to endorse or 
//   promote products derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS 
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 
// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
#endregion

using System;
using System.Collections.Generic;
using System.Text;

namespace Owlpal.Utils
{
    /// <summary>
    /// Represents a generator of access key.
    /// </summary>
    public class AccessKey
    {
        /// <summary>
        /// Generates the random key.
        /// </summary>
        /// <param name="number">A Global Unique ID.</param>
        /// <returns></returns>
        public static string Generate(string number)
        {
            string theNumber = string.Empty;

            for (int i = 0; i < 5; i++)
            {
                string substring = number.Substring(i, 1);
                for (int a = 0; a < 10; a++)
                {
                    if (substring == a.ToString())
                    {
                        int subinteger;
                        subinteger = (Convert.ToInt32(substring) + 13) % 5;
                        theNumber = theNumber + subinteger.ToString();
                    }
                }
                char[] alphabet = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '1', '1', '1', '1' };
                for (int a = 0; a < 26; a++)
                {
                    if (Convert.ToChar(substring) == alphabet[a])
                    {
                        theNumber = theNumber + substring.Replace(alphabet[a], alphabet[a + 5]).ToUpper();
                    }
                }
            }
            return theNumber;
        }
    }
}
